home *** CD-ROM | disk | FTP | other *** search
/ Night Owl 6 / Night Owl's Shareware - PDSI-006 - Night Owl Corp (1990).iso / 029a / pdsrt321.zip / BLDTST.C next >
C/C++ Source or Header  |  1991-07-25  |  3KB  |  136 lines

  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <string.h>
  4. #include <ctype.h>
  5. #include <mem.h>
  6.  
  7. #include "queue.h"
  8.  
  9. void Usage (void);
  10.  
  11. struct FieldEntry {
  12.     int Begin;
  13.     int Len;
  14.     };
  15.  
  16.  void
  17. main (int argc, char *argv[]) {
  18.     FILE *F1;
  19.     char FileName[65];
  20.     char *String;
  21.     char Temp[100];
  22.     char *Ptr, *p1, *p2;
  23.     long Count = 0;
  24.     long j;
  25.     int i, k;
  26.     int Random = 0;
  27.     int RecLen = 10;
  28.     QUE_DEF Fields;
  29.     QUE_ENTRY *t;
  30.     struct FieldEntry *f;
  31.     char Alphas[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
  32.  
  33.     if (argc < 2) Usage();
  34.  
  35.     strcpy(FileName, "test.dat");
  36.  
  37.     InitQueue(&Fields);
  38.  
  39.     for (i=1; i < argc; i++) {
  40.         if (argv[i][0] != '-') continue;
  41.         switch ( tolower(argv[i][1]) ) {
  42.             case 'r':
  43.                 Random = 1;
  44.                 break;
  45.             case 'l':
  46.                 if ( !isdigit(argv[i][2]) ) {
  47.                     fprintf(stderr, "The '-l' option requires a length.\n");
  48.                     exit(1);
  49.                     }
  50.                 if ( (RecLen = atoi(&argv[i][2])) == 0 ) {
  51.                     fprintf(stderr, "Invalid length: %s\n", argv[i]);
  52.                     exit(1);
  53.                     }
  54.                 break;
  55.             case 'f':
  56.                 strcpy(FileName, &argv[i][2]);
  57.                 break;
  58.             default:
  59.                 fprintf(stderr, "Invalid option: %s\n", argv[i]);
  60.                 Usage();
  61.             }
  62.         }
  63.  
  64.     for (i=1; i < argc; i++) {
  65.         if (argv[i][0] == '-') continue;
  66.         p1 = argv[i];
  67.         if ( (Count == 0) && (strspn(p1, "0123456789") == strlen(p1)) ) {
  68.             Count = strtol(argv[i], &Ptr, 10);
  69.             if (*Ptr != '\0') {
  70.                 fprintf(stderr, "Invalid count: %s\n", argv[i]);
  71.                 exit(1);
  72.                 }
  73.             }
  74.         else {
  75.             p2 = &p1[strspn(p1, "0123456789")];
  76.             if ( (f = malloc(sizeof(struct FieldEntry))) == NULL) {
  77.                 fprintf(stderr, "Insufficient memory for field entry.\n");
  78.                 exit(1);
  79.                 }
  80.             f->Begin = atoi(p1) - 1;
  81.             if (*p2 == ':') f->Len = atoi(++p2);
  82.             else if (*p2 == '-') f->Len = atoi(++p2) - f->Begin;
  83.             else {
  84.                 fprintf(stderr, "Invalid Field specification: %s\n", argv[i]);
  85.                 exit(2);
  86.                 }
  87.             Enque(&Fields, f);
  88.             }
  89.         }
  90.  
  91.     if ( (String = malloc(RecLen + 1)) == NULL ) {
  92.         fprintf(stderr, "Insufficient memory!\n");
  93.         exit(1);
  94.         }
  95.     memset(String, '-', RecLen);
  96.     String[RecLen] = '\0';
  97.  
  98.     if ( (F1 = fopen(FileName, "w")) == NULL ) {
  99.         fprintf(stderr, "I can't create output file: %s", FileName);
  100.         perror("");
  101.         exit(1);
  102.         }
  103.  
  104.     for (j=0; j < Count; j++) {
  105.         if (Fields.Count == 0) {
  106.             if (Random) sprintf(String, "%09d", rand() );
  107.             else sprintf(String, "%09.9ld", j);
  108.             if (RecLen > 9) String[9] = '-';
  109.             }
  110.         else for (k=0, t=Fields.Head; t != NULL; t = t->Next, k++) {
  111.             f = t->Body;
  112.             if (k & 0x01) {
  113.                 if (Random) sprintf(Temp, "%0*d", f->Len, rand() );
  114.                 else sprintf(Temp, "%0*.*ld", f->Len, f->Len, j);
  115.                 strncpy(&String[f->Begin], Temp, f->Len);
  116.                 }
  117.             else {
  118.                 if (Random) setmem(Temp, f->Len, Alphas[rand() % 26]);
  119.                 else setmem(Temp, f->Len, Alphas[j % 26]);
  120.                 strncpy(&String[f->Begin], Temp, f->Len);
  121.                 }
  122.             }
  123.         if ( (j) && ( (j % 1000) == 0) ) printf(".");
  124.         fprintf(F1, "%s\n", String);
  125.         }
  126.  
  127.     fclose(F1);
  128.     }
  129.  
  130.  
  131.  void
  132. Usage (void) {
  133.     fprintf(stderr, "USAGE: bldtst [-r] [-f file_name] count\n");
  134.     exit(1);
  135.     }
  136.